import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:safetymonitor/app/components/dialog/back_custom_callback_general_dialog.dart';
import 'package:safetymonitor/app/components/custom_modele/custom_high_input_page.dart';
import 'package:safetymonitor/app/components/custom_modele/custom_multiple_bottom_sheet.dart';
import 'package:safetymonitor/app/components/custom_select_function.dart';
import 'package:safetymonitor/app/components/toast_widget.dart';
import 'package:safetymonitor/app/core/core.dart';
import 'package:safetymonitor/app/core/env/env.dart';
import 'package:safetymonitor/app/core/ext/widget_extension.dart';
import 'package:safetymonitor/app/core/http/http.dart';
import 'package:safetymonitor/app/core/utils/interface.dart';
import 'package:safetymonitor/app/core/utils/user_manager.dart';
import 'package:safetymonitor/app/data/entities/application/corporation_name_entity.dart';
import 'package:safetymonitor/app/data/entities/application/get_distribute_return_record_list_entity.dart';
import 'package:safetymonitor/app/data/entities/home/duty/system_user_page_entity.dart';
import 'package:safetymonitor/app/data/entities/home/warning/alarm_resp_entity.dart';
import 'package:safetymonitor/modules/home/alarm_warning/no_completed/controller.dart';
import 'package:safetymonitor/modules/home/home_page/home_page_control.dart';

///处置
class DisposeController extends GetxController {
  ///退回信息和验收信息记录
  GetDistributeReturnRecordListEntity getDistributeReturnRecordListEntity = GetDistributeReturnRecordListEntity();

  ///主公司 写死（默认）
  // String currentMainCompany = '金钼集团';

  /// 当前选中的标题索引，0：基本信息 1:隐患整改
  RxInt currentIndex = 0.obs;

  /// 实体数据
  AlarmRespEntity entity = Get.arguments as AlarmRespEntity;

  /// 列表控制器
  final listController = Get.find<NoCompletedController>();

  //
  // /// 总公司指派
  // int totalCompanyAssign = 1;
  //
  // /// 总公司再次指派
  // int totalCompanyAssignN = 2;
  //
  // /// 分公司指派
  // int affiliateCompanyAssign = 3;
  //
  // /// 分公司再次指派
  // int affiliateCompanyAssignN = 4;
  //
  // /// 处置人
  // int disposalPersonnel = 5;
  //
  // /// 再次处置人
  // int disposalPersonnelN = 6;
  //
  // /// 分公司验收
  // int affiliateAcceptance = 7;
  //
  // /// 分公司再次验收
  // int affiliateAcceptanceN = 8;
  //
  // /// 总公司验收
  // int totalAcceptance = 9;
  //
  // /// 总公司再次验收
  // int totalAcceptanceN = 10;
  //
  // /// 只有查看的权限
  // int onlySee = 11;

  /// （登陆人id）
  int? latestDistributionHighId = UserManager.getUser()!.id;

  ///  负责人
  int? affiliateCompanyAssignHighId;
  String affiliateCompanyAssignHighIdName = '';

  //----------------------------主公司/分公司 指派---------------------------------------------
  ///  分公司派发
  int? latestDistributionId;
  String latestDistributionIdName = '';

  //-------------------------------处置人--------------------------------------------------
  ///报警原因
  String reasonAlarm = '';

  /// 报警描述
  String alarmDescription = '';

  /// 现场处理人
  int? onSiteHandlerId;
  String onSiteHandlerName = '';

  /// 所属部门
  int? departmentBelongsId;
  String departmentBelongsIdName = '';

  /// 现场处理时间
  String onSiteProcessingTime = '';

  /// 处置措施
  String disposalMeasures = '';

  /// 处置附件
  String disposalAttachments = '';

  //-------------------------------处置验收--------------------------------------------------
  /// 处置结果(默认处置合格)
  int disposalResults = 0;

  /// 验收说明
  String acceptanceInstructions = '';

  //-------------------------------退回原因--------------------------------------------------
  String describe = '';

  @override
  void onInit() {
    super.onInit();
    //浅拷贝
    nameListNO = List.from(Get.find<HomePageControl>().nameList);
    nameListNO= nameListNO.where((element) => element.id==115||element.id==118||element.id==119||element.id==120||element.id==121||element.id==122).toList();
    // for (int i = 0; i < nameListNO.length; i++) {
    //   if (nameListNO[i].id == 100) {
    //     nameListNO.remove(nameListNO[i]);
    //   }
    // }
    //退回记录，验收记录的查询
    getDistributeReturnList();
  }

  ///获得企业基本信息
  void getDistributeReturnList() async {
    final res = await HttpUtil().generateGetRequest<GetDistributeReturnRecordListEntity>(
      Interface.getDistributeReturnRecordList,
      queryParameters: {'alarmId': entity.id},
    ).execute();
    res.onSuccess((result) {
      if (result.data != null) {
        getDistributeReturnRecordListEntity = result.data!;
      }
      update();
    });
  }

  /// title选择切换
  void selectTitle(int index) {
    currentIndex.value = index;
  }

  /// 发现时间选择
  void showDatePicker() {
    CustomSelectFunction.selectDateTime(
      onCallBack: (String value) {
        onSiteProcessingTime = value;
        update();
      },
    );
  }

  /// 选择框的值
  void select(bool value, int click, bool isZhong) {
    entity.click = value
        ? click
        : isZhong
            ? 15
            : 14;
  }

  ///头部信息
  String tittle() {
    //根据click设置响应的UI
    if (entity.click == 1 || entity.click == 2) {
      //总公司指派
      //click传 1/2
      // latestOperationStatus 1
      // latestDistributionHighId 总公司派发人id（登陆人id）
      // latestDistributionId 分公司派发人id
      return entity.click == 1?'总公司指派':'总公司再次指派';
    } else if (entity.click == 3 || entity.click == 4) {
      //分公司指派
      //click传 3/4
      // latestOperationStatus 2
      // latestDistributionId 分公司派发人id（登陆人id）
      // latestDisposalId 处置人id
      return entity.click == 3?'分公司指派':'分公司再次指派';
    } else if (entity.click == 5 || entity.click == 6) {
      //处置 (具体的处置人)
      //click传 5/6
      //latestOperationStatus 8
      //latestDisposalId 处置人id
      return entity.click == 5?'处置':'再次处置';
    } else if (entity.click == 7 || entity.click == 8) {
      //分公司验收
      //click传 7/8
      // latestOperationStatus 5
      // latestDistributionId 分公司派发人id（登陆人id）
      return entity.click == 7?'分公司验收':'分公司再次验收';
    } else if (entity.click == 9 || entity.click == 10) {
      //总公司验收
      // click传 9/10
      // latestOperationStatus 4
      // latestDistributionHighId 总公司派发人id（登陆人id）
      return entity.click == 9 ?'总公司验收':'总公司再次验收';
    }
    return '详情';
  }
  String tabStr() {
    if (entity.click == 1 || entity.click == 2) {
      //总公司指派
      return '指派';
    } else if (entity.click == 3 || entity.click == 4) {
      //分公司指派
      return '指派';
    } else if (entity.click == 5 || entity.click == 6) {
      //处置 (具体的处置人)
      return '处置';
    } else if (entity.click == 7 || entity.click == 8) {
      //分公司验收
      return '验收';
    } else if (entity.click == 9 || entity.click == 10) {
      //总公司验收
      return '验收';
    }
    return '';
  }

  // 选中的公司
  // CorporationNameEntity? _selectId;

  // 公司列表
  // List<CorporationNameEntity> nameList = [];

  // // 选取公司
  // void selectCompanyOn() {
  //   CustomEquipmentBottomSheet<CorporationNameEntity>(
  //     dataList: nameList,
  //     checkedList: _selectId != null ? [_selectId!] : [],
  //     onConfirm: (value) {
  //       if (value.isNotEmpty) {
  //         _selectId = value[0];
  //         if (_selectId != null) {
  //           latestDistributionIdName = _selectId!.name;
  //           latestDistributionId = _selectId!.id;
  //         }
  //         update();
  //       }
  //     },
  //     title: '选择公司',
  //     isMultiple: false,
  //   ).showBottomSheetDialog();
  // }

  /// 提交信息时的提示
  bool appToastTip() {
    //根据click设置响应的UI
    if (entity.click == 1 || entity.click == 2) {
      //总公司指派
      if (latestDistributionIdName.trim().isEmpty) {
        AppToast.showError('请输入所属分公司');
        return false;
      }
      if (affiliateCompanyAssignHighIdName.trim().isEmpty) {
        AppToast.showError('请输入负责人');
        return false;
      }
    } else if (entity.click == 3 || entity.click == 4) {
      //分公司指派
      if (affiliateCompanyAssignHighIdName.trim().isEmpty) {
        AppToast.showError('请输入负责人');
        return false;
      }
    } else if (entity.click == 5 || entity.click == 6) {
      //处置 (具体的处置人)
      if (reasonAlarm.trim().isEmpty) {
        AppToast.showError('请输入报警原因');
        return false;
      }
      if (alarmDescription.trim().isEmpty) {
        AppToast.showError('请输入报警描述');
        return false;
      }
      if (onSiteHandlerName.trim().isEmpty) {
        AppToast.showError('请输入现场处理人');
        return false;
      }
      if (departmentBelongsIdName.trim().isEmpty) {
        AppToast.showError('请输入所属部门');
        return false;
      }
      if (onSiteProcessingTime.trim().isEmpty) {
        AppToast.showError('请输入现场处理时间');
        return false;
      }
      // if (affiliateCompanyAssignHighIdName.trim().isEmpty) {
      //   AppToast.showError('请输入负责人');
      //   return false;
      // }
      if (disposalMeasures.trim().isEmpty) {
        AppToast.showError('请输入处置措施');
        return false;
      }
      if (disposalAttachments.trim().isEmpty&& DartDefines.appInstallChannel != AppInstallChannel.kaifa) {
        AppToast.showError('请选择处置附件');
        return false;
      }
    } else if (entity.click == 7 || entity.click == 8) {
      //分公司验收
    } else if (entity.click == 9 || entity.click == 10) {
      //总公司验收
    }
    return true;
  }

  ///请求数据
  dynamic _requestData() {
    if (entity.click == 1 || entity.click == 2) {
      //总公司指派
      //click传 1/2
      // latestOperationStatus 1
      // latestDistributionHighId 总公司派发人id（登陆人id）
      // latestDistributionId 分公司派发人id
      return {
        'id': entity.id,
        'click': entity.click,
        'latestOperationStatus': '1',
        'latestDistributionHighId': latestDistributionHighId, //总公司派发人id（登陆人id）
        'latestDistributionId': affiliateCompanyAssignHighId, //分公司派发人id
      };
    } else if (entity.click == 3 || entity.click == 4) {
      //分公司指派
      //click传 3/4
      // latestOperationStatus 2
      // latestDistributionId 分公司派发人id（登陆人id）
      // latestDisposalId 处置人id
      return {
        'id': entity.id,
        'click': entity.click,
        'latestOperationStatus': '2',
        'latestDistributionId': latestDistributionHighId, // 分公司派发人id（登陆人id）
        'latestDisposalId': affiliateCompanyAssignHighId, // 处置人id
        // 'undertakePersonId': affiliateCompanyAssignHighId, // 处置人id
      };
    } else if (entity.click == 5 || entity.click == 6) {
      //处置 (具体的处置人)
      //click传 5/6
      //latestOperationStatus 8
      //latestDisposalId 处置人id
      //如果是处置这里还要在掉另一个接口（老版本的接口）
      chuZhiConfirm();
      return {
        'id': entity.id,
        'click': entity.click,
        'latestOperationStatus': '8',
        'latestDisposalId': latestDistributionHighId, //处置人id 也是登陆人
        'alarmLevel': entity.alarmLevel,

        'sceneDisposalPersonId': onSiteHandlerId, //现场处理人
        'ascriptionDeptId': departmentBelongsId, //所属部门
        'sceneDisposalTime': onSiteProcessingTime, //现场处理时间
        'sceneDisposalTimeStr': onSiteProcessingTime, //现场处理时间
        'undertakePersonId': latestDistributionHighId, //负责人

        //新增字段（记录原因）老接口合并参数
        'reasonType': reasonAlarm, //处置报警原因类型
        'reasonAnalysis': alarmDescription, //处置报警原因分析
        // 'sceneDisposalPersonId':sceneDisposalPersonId, //现场处理人id
        // 'ascriptionDeptId':ascriptionDeptId, //所属部门id
        // 'sceneDisposalTime':sceneDisposalTime, // 现场处理时间
        // 'undertakePersonId':undertakePersonId, // 负责人id
        'disposalMeasures': disposalMeasures, // 处置措施
        'disposalMeasuresAnnex': disposalAttachments, //  处置措施附件
      };
    } else if (entity.click == 7 || entity.click == 8) {
      //分公司验收
      //click传 7/8
      // latestOperationStatus 5
      // latestDistributionId 分公司派发人id（登陆人id）
      return {
        'id': entity.id,
        'click': entity.click,
        'latestOperationStatus': '5',
        'latestDistributionId': latestDistributionHighId, // 分公司派发人id（登陆人id）
        'alarmLevel': entity.alarmLevel,
        'describe': acceptanceInstructions, //验收描述
      };
    } else if (entity.click == 9 || entity.click == 10) {
      //总公司验收
      // click传 9/10
      // latestOperationStatus 4
      // latestDistributionHighId 总公司派发人id（登陆人id）
      return {
        'id': entity.id,
        'click': entity.click,
        'latestOperationStatus': '4',
        'latestDistributionHighId': latestDistributionHighId, //总公司派发人id（登陆人id）
        'describe': acceptanceInstructions, //验收描述
      };
    } else if (entity.click == 14) {
      //分公司验收不通过
      //click传 14
      // latestOperationStatus 7
      // latestDistributionId 分公司派发人id（登陆人id）
      // describe ?
      return {
        'id': entity.id,
        'click': entity.click,
        'latestOperationStatus': '7',
        'latestDistributionId': latestDistributionHighId, // 分公司派发人id（登陆人id）
        'describe': acceptanceInstructions, //验收描述
      };
    } else if (entity.click == 15) {
      //总公司验收不通过
      // click传 15
      // latestOperationStatus 6
      // latestDistributionHighId 总公司派发人id（登陆人id）
      // describe ?
      return {
        'id': entity.id,
        'click': entity.click,
        'latestOperationStatus': '6',
        'latestDistributionHighId': latestDistributionHighId, //  总公司派发人id（登陆人id）
        'describe': acceptanceInstructions, //验收描述
      };
    }
  }

  /// 确定提交
  Future<void> confirm() async {
    if (!appToastTip()) {
      return;
    }
    // 调用接口
    final res = await HttpUtil()
        .generatePutRequest(
          Interface.alarmUpdate,
          data: _requestData(),
        )
        .execute(isShowLoading: true);
    res.onSuccess((result) {
      Get.back(closeOverlays: true);
      AppToast.showSuccess('提交成功');
      Get.find<NoCompletedController>().globalKey.currentState?.onRefresh();
    });
  }

  void backAlarmUpdate(String describe) async {
    if (entity.click == 3 || entity.click == 4) {
      //分公司退回  12
      final res = await HttpUtil().generatePutRequest(
        Interface.alarmUpdate,
        data: {
          'id': entity.id,
          'click': 12,
          'latestOperationStatus': '3', //分公司退回指派
          'latestDistributionId': latestDistributionHighId, //登陆人id
          'describe': describe, //退回原因
        },
      ).execute(isShowLoading: true);
      res.onSuccess((result) {
        Get.back(closeOverlays: true);
        AppToast.showSuccess('分公司退回成功');
        Get.find<NoCompletedController>().globalKey.currentState?.onRefresh();
      });
    } else if (entity.click == 5 || entity.click == 6) {
      //退回处置 13
      final res1 = await HttpUtil().generatePutRequest(
        Interface.alarmUpdate,
        data: {
          'id': entity.id,
          'click': 13,
          'latestOperationStatus': '9', //退回处置
          'describe': describe, //退回原因
        },
      ).execute(isShowLoading: true);
      res1.onSuccess((result) {
        Get.back(closeOverlays: true);
        AppToast.showSuccess('退回处置成功');
        Get.find<NoCompletedController>().globalKey.currentState?.onRefresh();
      });
    }
  }

  ///退回
  void back() {
    // backAlarmUpdate();
    Get.dialog<bool>(
      CustomGeneralCallbackDialog(
        title: '退回原因',
        content: SingleChildScrollView(
          child: CustomHighInputPage(
              isShowTitle: false,
              isRequired: false,
              // title: '处置措施：',
              text: '',
              hintText: '请输入退回原因',
              onCallBack: (value) {
                describe = value;
              }),
        ),
        onPressed: () {
          backAlarmUpdate(describe);
        },
      ),
    );
  }

  /// 老版本处置时的提交（处置消警操作）
  Future<void> chuZhiConfirm() async {
    // 附件信息
    final res = await HttpUtil().generatePutRequest(
      Interface.putDisposeAlarm,
      data: {
        'id': entity.id,
        // 'type': 2,
        'reasonType': reasonAlarm, //报警原因
        'reasonAnalysis': alarmDescription, //报警描述
        'description': disposalMeasures, //处置措施
        'disarmingDescriptionAnnex': disposalAttachments, //附件
      },
    ).execute(isShowLoading: true);
    res.onSuccess((result) {
      AppToast.showSuccess('处置成功!');
    });
  }

  /// 公司列表（不含总公司）
  List<CorporationNameEntity> nameListNO = [];

  /// 选中的公司（center）
  CorporationNameEntity? _selectIdCenter;

  /// 责任单位
  void selectCurrentDept() {
    CustomEquipmentBottomSheet<CorporationNameEntity>(
      dataList: nameListNO,
      checkedList: _selectIdCenter != null ? [_selectIdCenter!] : [],
      onConfirm: (value) {
        if (value.isNotEmpty) {
          _selectIdCenter = value[0];
          latestDistributionIdName = value[0].getShowName();
          latestDistributionId = value[0].id;
          // getDateFz(); 负责人可能有多个
          update();
        }
      },
      title: '选择公司',
      isMultiple: false,
    ).showBottomSheetDialog();
  }

  /// 获取人员列表数据
  Future<void> getDateFz() async {
    // 获取人员单位接口
    final res = await HttpUtil().generateGetRequest<List<SystemUserPageEntity>>(
      Interface.getUserInfoByCompanyId,
      queryParameters: {'companyId':latestDistributionId},
    ).execute();
    res.onSuccess((result) {
      if(result.data!=null){
        for (var item in result.data!) {
          item.deptId==UserManager.getUser()?.id;
          affiliateCompanyAssignHighId = item.id; //获取人员id
          affiliateCompanyAssignHighIdName = item.nickname!; //获取人员名字
          return;
        }
      }
    });
    update();
  }
}
